package es.ise.core.mbg.plugins;

import java.util.List;

import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
import org.mybatis.generator.api.dom.java.TopLevelClass;

/**
 * Este plugin hace que todas los campos de un modelo tengan una
 * anotación <code>Column</code> indicando a que columna de la tabla
 * en la base de datos hacen referencia.
 * 
 * @author Paco
 *
 */
public class ColumnMetadataPlugin extends PluginAdapter
{
	private static final FullyQualifiedJavaType columnAnnotationType = new FullyQualifiedJavaType("es.ise.core.model.Column");
	/**
	 * {@inheritDoc}
	 * 
	 * @return siempre devuelve <code>true</code> porque no hay comprobaciones que hacer
	 */
	@Override
	public boolean validate(List<String> warnings)
	{
		// no validations needed
		return true;
	}
	

	@Override
	public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable)
	{
		topLevelClass.addImportedType(columnAnnotationType);
		return true;
	}


	@Override
	public boolean modelFieldGenerated(Field field, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType)
	{
		field.addAnnotation(String.format("@Column(\"%s\")", introspectedColumn.getActualColumnName()));
		return true;
	}

	

}
